Systems and methods to track movement of a device in an indoor environment

ABSTRACT

Systems and methods to track a device in an indoor environment having polygonal obstructions are disclosed. In one variation, a computer-implemented method to localize the device involves receiving, at a server, a signal strength profile from the device, wherein the signal strength profile includes signal strengths of wireless signal transceivers in the indoor environment; determining a raw estimated location in a coordinate plane representing the indoor environment by using a K-nearest neighbor algorithm; calculating a straight-line path in the coordinate plane from an immediately preceding location to the raw estimated location; selecting the raw estimated location as a candidate location when the straight-line path connects the two locations without intersecting any of the polygonal obstructions; calculating a weighted-average location using the immediately preceding location and the candidate location; and storing the weighted-average location as a new location when a hypothetical velocity is less than or equal to a saturation velocity.

BACKGROUND 1. Field of the Technology

The present disclosure relates generally to the field of indoorlocalization, and, more specifically, to systems and methods to track adevice in an indoor environment having polygonal obstructions.

2. Related Art

Portable wireless devices such as smartphones, tablets, smartwatches,and fitness monitors are often carried by users throughout the day giventhe crucial functionalities provided by such devices. With theindispensable nature of these devices, the ability to ascertain theirlocation is quickly becoming a prerequisite to understanding thebehavior of their users. Although location tracking has traditionallybeen the domain of the Global Positioning System (GPS), satellite basedtracking services cannot be used effectively in indoor environments. Toovercome these limitations, systems have been developed utilizingwireless short-range networks such WiFi and Bluetooth®.

WiFi based indoor localization techniques include localization based onsignal propagation and localization based on position fingerprints.While the latter technique has received attention based on its abilityto localize in complex indoor environments, the technique has not faredas well in environments containing obstructions such as retail orwarehouse environments having product shelves or displays.

For example, FIG. 1 depicts a plan view of an estimated route 104undertaken by a portable wireless device as determined using receivedsignal strength indicator (RSSI) fingerprints in an indoor environment100, such as a retail store. As can be seen in FIG. 1, the indoorenvironment 100 can contain polygonal obstructions 102 in the form ofproduct shelves or displays. Also, the estimated route 104 shown in FIG.1 is choppy and does not provide an accurate representation of thedevice user's movements in relation to the product aisles or shelves. Insome circumstances, a filter can be applied to the raw estimatedpositions obtained from the RSSI fingerprints based on presetlimitations such as a user's maximum velocity. However, as can be seenin FIG. 2, even when such a filter is applied, the estimated route 104does not provide an accurate representation of the device user'smovements vis-à-vis the polygonal obstructions 102 in the indoorenvironment 100.

Therefore, a solution is needed for a system and methods to convenientlyand effectively track the movement of a device in an indoor environmenthaving polygonal obstructions. Such a solution should be robust,relatively low-cost, and provide an accurate representation of thedevice user's movements relative to polygonal obstructions such asproduct aisles, displays, and indoor fixtures. Moreover, such a solutionshould not be overly complex and should be easy to deploy.

SUMMARY

A system to localize a device in an indoor environment is disclosed. Thesystem includes wireless signal transceivers positioned in the indoorenvironment. The indoor environment can contain one or more polygonalobstructions. The system can also include a server comprising aprocessing unit, a memory unit, and a server communication unit. Theprocessing unit can be programmed to receive a signal strength profilefrom the device. The signal strength profile can include signalstrengths of the wireless signal transceivers received at the device inthe indoor environment. The processing unit can also be programmed todetermine a raw estimated location of the device in a coordinate planerepresenting the indoor environment by using a K-nearest neighbor (KNN)algorithm to compare the signal strength profile with reference profilesstored in a database.

The processing unit can be programmed to also calculate a straight-linepath in the coordinate plane from an immediately preceding location ofthe device to the raw estimated location and select the raw estimatedlocation as a candidate location when the straight-line path connectsthe two locations without intersecting any of the polygonal obstructionsin the coordinate plane. The processing unit can be programmed to alsocalculate a weighted-average location using the immediately precedinglocation and the candidate location and store the weighted-averagelocation as a new location of the device in the indoor environment whena hypothetical velocity calculated using an elapsed time and a distanceseparating the immediately preceding location and the weighted-averagelocation is less than or equal to a saturation velocity.

The processing unit can be programmed to generate an interlinking pointusing an x-axis coordinate of the immediately preceding location and ay-axis coordinate of the raw estimated location or the y-axis coordinateof the immediately preceding location and the x-axis coordinate of theraw estimated location and select the interlinking point as thecandidate location when a first linear segment connects the immediatelypreceding location and the interlinking point without intersecting anyof the polygonal obstructions and a second linear segment connects theraw estimated location and the interlinking point without intersectingany of the polygonal obstructions.

The processing unit can be programmed to determine a first polyline pathfrom the immediately preceding location to the raw estimated locationwhere a portion of the first polyline path traverses a first artery lanein the indoor environment. The processing unit can also be programmed todetermine a second polyline path from the immediately preceding locationto the raw estimated location where a portion of the second polylinepath traverses a second artery lane in the indoor environment. Theprocessing unit can further be programmed to select the first arterylane as a preferred artery lane when the first polyline path is shorterthan the second polyline path or select the second artery lane as thepreferred artery lane when the second polyline path is shorter than thefirst polyline path.

The processing unit can be programmed to generate an artery entrancelocation using an x-axis coordinate of the immediately precedinglocation and a y-axis coordinate of the preferred artery lane or usingthe y-axis coordinate of the immediately preceding location and thex-axis coordinate of the preferred artery lane and select the arteryentrance location as the candidate location.

The processing unit can be programmed to calculate a straight-linesegment from the immediately preceding location to the artery entrancelocation prior to selecting the artery entrance location as thecandidate location and determine a laterally displaced location when thestraight-line segment intersects any of the polygonal obstructions. Thelaterally displaced location can be determined using a y-axis coordinateof the immediately preceding location and an x-axis coordinate of theraw estimated location. The processing unit can be programmed to selectthe laterally displaced location as the candidate location.

The processing unit can be programmed to compare the raw estimatedlocation of the device in the coordinate plane with coordinatesrepresenting borders of the polygonal obstructions prior to calculatingthe straight-line path and determine the raw estimated location iswithin the borders of one of the polygonal obstructions. The processingunit can also be programmed to adjust at least one coordinate of the rawestimated location to place the raw estimated location outside of theborders of the polygonal obstruction.

The processing unit can also be programmed to set a saturated locationas the new location of the device when the hypothetical velocitycalculated using the elapsed time and the distance separating theimmediately preceding location and the weighted-average location isgreater than the saturation velocity. The saturated location can begenerated using the saturation velocity and the saturated location canbe closer in distance to the immediately preceding location than theweighted-average location.

The indoor environment can comprise between one wireless signaltransceiver per 150 square meters and one wireless signal transceiverper 57 square meters. The wireless signal transceivers can include atleast one of WiFi access points and Bluetooth® beacons.

A computer-implemented method to localize a device in an indoorenvironment is also disclosed. The method can involve receiving, at aserver, a signal strength profile from the device. The signal strengthprofile can include signal strengths of wireless signal transceivers inthe indoor environment and the indoor environment can contain one ormore polygonal obstructions. The method can also involve determining,using a processing unit of the server, a raw estimated location of thedevice in a coordinate plane representing the indoor environment byusing a K-nearest neighbor (KNN) algorithm to compare the signalstrength profile with reference profiles stored in a database. Themethod can also involve calculating, using the processing unit of theserver, a straight-line path in the coordinate plane from an immediatelypreceding location of the device to the raw estimated location andselecting, using the processing unit of the server, the raw estimatedlocation as a candidate location when the straight-line path connectsthe two locations without intersecting any of the polygonal obstructionsin the coordinate plane.

The method can also involve calculating, using the processing unit ofthe server, a weighted-average location using the immediately precedinglocation and the candidate location and storing, using the processingunit of the server, the weighted-average location as a new location ofthe device in the indoor environment when a hypothetical velocitycalculated using an elapsed time and a distance separating theimmediately preceding location and the weighted-average location is lessthan or equal to a saturation velocity.

The method can further include generating, using the processing unit ofthe server, an interlinking point using an x-axis coordinate of theimmediately preceding location and a y-axis coordinate of the rawestimated location or the y-axis coordinate of the immediately precedinglocation and the x-axis coordinate of the raw estimated location. Themethod can also include selecting, using the processing unit of theserver, the interlinking point as the candidate location when a firstlinear segment connects the immediately preceding location and theinterlinking point without intersecting any of the polygonalobstructions and a second linear segment connects the raw estimatedlocation and the interlinking point without intersecting any of thepolygonal obstructions.

The method can also involve determining, using the processing unit ofthe server, a first polyline path from the immediately precedinglocation to the raw estimated location, wherein a portion of the firstpolyline path traverses a first artery lane in the indoor environmentand determining, using the processing unit of the server, a secondpolyline path from the immediately preceding location to the rawestimated location, wherein a portion of the second polyline pathtraverses a second artery lane in the indoor environment. The method canfurther involve selecting, using the processing unit of the server, thefirst artery lane as a preferred artery lane when the first polylinepath is shorter than the second polyline path and selecting, using theprocessing unit of the server, the second artery lane as the preferredartery lane when the second polyline path is shorter than the firstpolyline path and generating, using the processing unit of the server,an artery entrance location using an x-axis coordinate of theimmediately preceding location and a y-axis coordinate of the preferredartery lane or using the y-axis coordinate of the immediately precedinglocation and the x-axis coordinate of the preferred artery lane andselecting, using the processing unit of the server, the artery entrancelocation as the candidate location.

The method can also involve calculating, using the processing unit ofthe server, a straight-line segment from the immediately precedinglocation to the artery entrance location prior to selecting the arteryentrance location as the candidate location and determining, using theprocessing unit of the server, a laterally displaced location when thestraight-line segment intersects any of the polygonal obstructions,wherein the laterally displaced location is determined using a y-axiscoordinate of the immediately preceding location and an x-axiscoordinate of the raw estimated location. The method can further involveselecting, using the processing unit of the server, the laterallydisplaced location as the candidate location.

The method can also involve comparing, using the processing unit of theserver, the raw estimated location of the device in the coordinate planewith coordinates representing borders of the polygonal obstructionsprior to calculating the straight-line path and determining, using theprocessing unit of the server, the raw estimated location is within theborders of one of the polygonal obstructions. The method can furtherinvolve adjusting, using the processing unit of the server, at least onecoordinate of the raw estimated location to place the raw estimatedlocation outside of the borders of the polygonal obstruction.

The method can also involve setting, using the processing unit of theserver, a saturated location as the new location of the device when thehypothetical velocity calculated using the elapsed time and the distanceseparating the immediately preceding location and the weighted-averagelocation is greater than the saturation velocity. The saturated locationcan be generated using the saturation velocity and the saturatedlocation can be closer in distance to the immediately preceding locationthan the weighted-average location.

A non-transitory computer-readable medium comprising instructions storedthereon is also disclosed. The instructions, when executed by aprocessing unit, can perform the method steps mentioned above. Themethods, devices, or systems disclosed herein may be implemented in avariety of different ways. Certain embodiments have other steps orelements in addition to or in place of those mentioned above. The stepsor elements will become apparent to those skilled in the art from theaccompanying drawings or from the detailed description that follows.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 illustrates a schematic of an indoor environment and a routeconstructed using raw location estimates.

FIG. 2 illustrates another schematic of an indoor environment and aroute constructed using raw location estimates passed through avariation of a low-pass filter.

FIG. 3 illustrates a schematic of a variation of a device localizationsystem.

FIG. 4A illustrates a variation of a server of the device localizationsystem.

FIG. 4B illustrates a variation of a portable wireless device of thedevice localization system.

FIG. 5 illustrates a representation of an indoor environment in acoordinate plane.

FIG. 6 illustrates a representation of an indoor environment having 33wireless signal transceivers.

FIG. 7 illustrates a representation of an indoor environment having 87wireless signal transceivers.

FIG. 8 illustrates the system determining a raw estimated location usingsignal strength profiles.

FIG. 9 illustrates the system performing an initial check of the rawestimated location.

FIGS. 10A and 10B illustrate the system evaluating straight-line pathsfrom an immediately preceding location to a raw estimated location.

FIGS. 11A and 11B illustrate the system generating interlinking pointsbetween an immediately preceding location and a raw estimated location.

FIGS. 12A and 12B illustrate the system evaluating polyline paths froman immediately preceding location and a raw estimated location usingartery lanes.

FIGS. 13A and 13B illustrate the system comparing hypotheticalvelocities with a saturation velocity.

FIG. 14 illustrates a filtered route generated by the system using themethods described herein.

FIG. 15 is a flowchart representing a variation of a method undertakenby the system.

DETAILED DESCRIPTION OF THE INVENTION

FIG. 3 illustrates a system 300 for tracking a device 310 in an indoorenvironment 100 having polygonal obstructions 102. The indoorenvironment 100 can include any enclosed environment having walls, afloor, and a roof, ceiling, or a partial roof or ceiling. The indoorenvironment 100 can include a retail environment such as a retail storeor supermarket, an entertainment venue, a sporting venue, a culturalvenue such as a museum, a warehouse or storage environment, anauditorium, a dining establishment, an academic institution such as aschool or lecture hall, an office or workplace, a residential building,or any combination thereof. The polygonal obstructions 102 can include aretail shelf or counter, a retail fixture or display, a wall or otherload supporting structure, a fixed set of seats or tables, a storagerack or shelf, a fixed set of gaming machines or entertainment kiosks,or any combination thereof.

The system 300 includes a server 304 communicatively coupled to thedevice 310 through a network 306. The network 306 can be any multi-hopnetwork that covers regions, countries, continents, or a combinationthereof. Examples of the network 306 can include a cellular network suchas a 3G network, a 4G network, a long-term evolution (LTE) network; asonic communication network; a satellite network; a wide area networksuch as the Internet, or a combination thereof.

The system 300 can also include a number of wireless signal transceivers302 positioned throughout the indoor environment 100. In one variation,the wireless signal transceivers 302 can include an already-deployednetwork of wireless access points, such as WiFi access points. In thisvariation, the device 310 can be in wireless communication with theserver 304 over the network 306 via at least one of the wireless signaltransceivers 302 or via another network such as a cellular or satellitenetwork. The wireless signal transceivers 302 can include WiFi routersor any component or device capable of establishing a network using theIEEE's 802.11 protocols or specifications.

In another variation, the wireless signal transceivers 302 can includeonly an overlay network of beacons such as Bluetooth® beacons or WiFibeacons. In this variation, the device 310 can be in wirelesscommunication with the server 304 via a cellular or satellite network orvia a wireless access point which is not a part of the beacon network.In yet another variation, the wireless signal transceivers 302 caninclude both an already-deployed network of wireless access points andan overlay network of beacons or access points.

The server 304, the device 310, and the wireless signal transceivers 302can be communicatively coupled to the network 306 through connections308. The connections 308 can include wireless connections, wiredconnections, or a combination thereof.

The server 304 can be a centralized server or a de-centralized server.For example, the server 304 can be a cloud server, a cluster server, apart of a server farm, or a combination thereof. The server 304 can be arack mounted server, a blade server, a mainframe, a dedicated desktop orlaptop computer, or a combination thereof. The server 304 can be avirtualized computing resource, a grid computing resource, apeer-to-peer distributed computing resource, or a combination thereof.The device 310 can include a portable wireless device such as asmartphone, a tablet, a laptop, a smartwatch or other wearable device, ahealth monitor, a personal entertainment device, a tracking device, or acombination thereof.

While FIG. 3 depicts an embodiment using one instance of each of theserver 304 and the device 310, it should be understood by one ofordinary skill in the art that the system 300 can include a plurality ofservers 304 such as a distributed server system or a cloud server and aplurality of devices 310.

FIG. 4A illustrates an embodiment of the server 304 of the system 300.The server 304 can have a processing unit 400, a memory unit 402, and aserver communication unit 404. The processing unit 400 can be coupled tothe memory unit 402 and the server communication unit 404 throughhigh-speed buses.

The processing unit 400 can include one or more central processing units(CPUs), graphical processing units (GPUs), Application-SpecificIntegrated Circuits (ASICs), field-programmable gate arrays (FPGAs), ora combination thereof. The processing unit 400 can execute softwarestored in the memory unit 402 to execute the methods or instructionsdescribed herein. The processing unit 400 can be implemented in a numberof different manners. For example, the processing unit 400 can be anembedded processor, a processor core, a microprocessor, a logic circuit,a hardware finite state machine (FSM), a digital signal processor (DSP),or a combination thereof. As a more specific example the processing unit400 can be a 64-bit processor.

The memory unit 402 can store software, data, logs, or a combinationthereof. The memory unit 402 can be an internal memory as shown in FIG.4A. Although not shown in the figures, it is contemplated by thisdisclosure that the memory unit 402 can be an external memory, such as amemory residing on a storage node, a cloud server, or a storage server.The memory unit 402 can be a volatile memory or a non-volatile memory.For example, the memory unit 402 can be a nonvolatile storage such asnon-volatile random access memory (NVRAM), Flash memory, disk storage,or a volatile storage such as static random access memory (SRAM). Thememory unit 402 can be the main storage unit for the server 304.

The server communication unit 404 can include one or more wired orwireless communication interfaces. For example, the server communicationunit 404 can be a network interface card of the server 304. The servercommunication unit 404 can be a wireless modem or a wired modem. In oneembodiment, the server communication unit 404 can be a WiFi modem. Inother embodiments, the server communication unit 404 can be a 3G modem,a 4G modem, an LTE modem, a Bluetooth™ component, a radio receiver, anantenna, or a combination thereof. The server 304 can connect to orcommunicatively couple with the wireless signal transceivers 302, thenetwork 306, or a combination thereof using the server communicationunit 404. The server 304 can transmit or receive packets or messagesusing the server communication unit 404.

FIG. 4B illustrates an embodiment of the device 310. The device 310 canhave a processor 406, a memory 408, a wireless communication module 410,and a display 412. The processor 406 can be coupled to the memory 408,and the wireless communication module 410 through high-speed buses.

The processor 406 can include one or more CPUs, GPUs, ASICs, FPGAs, or acombination thereof. The processor 406 can execute software stored inthe memory 408 to execute the methods or instructions described herein.The processor 406 can be implemented in a number of different manners.For example, the processor 406 can be an embedded processor, a processorcore, a microprocessor, a logic circuit, a hardware FSM, a DSP, or acombination thereof. As a more specific example the processor 406 can bea 32-bit processor such as an ARM™ processor.

The memory 408 can store software, data, logs, or a combination thereof.In one embodiment, the memory 408 can be an internal memory. In anotherembodiment, the memory 408 can be an external storage unit. The memory408 can be a volatile memory or a non-volatile memory. For example, thememory 408 can be a nonvolatile storage such as NVRAM, Flash memory,disk storage, or a volatile storage such as SRAM. The memory 408 can bethe main storage unit for the device 310.

The wireless communication module 410 can include a wirelesscommunication interface or chip. For example, the wireless communicationmodule 410 can be a network interface card of the device 310. Thewireless communication module 410 can be a wireless modem. In oneembodiment, the wireless communication module 410 can be a WiFi modem.In other embodiments, the wireless communication module 410 can be a 3Gmodem, a 4G modem, an LTE modem, a Bluetooth™ component, a radioreceiver, an antenna, or a combination thereof. The device 310 canconnect to or communicatively couple with the wireless signaltransceivers 302, the network 306, or a combination thereof using thewireless communication module 410. The device 310 can transmit orreceive packets or messages using the wireless communication module 410.

In one variation, the device 310 can also comprise a locational unithaving a GPS receiver, an inertial unit, a magnetometer, a compass, or acombination thereof. The GPS receiver can receive GPS signals from a GPSsatellite. The inertial unit can be implemented as a multi-axisaccelerometer including a three-axis accelerometer, a multi-axisgyroscope including a three-axis MEMS gyroscope, or a combinationthereof.

The display 412 can be a touchscreen display such as a liquid crystaldisplay (LCD), a thin film transistor (TFT) display, an organiclight-emitting diode (OLED) display, or an active-matrix organiclight-emitting diode (AMOLED) display. In certain embodiments, thedisplay 412 can be a retina display, a haptic touchscreen, or acombination thereof. For example, when the device 310 is a smartphone,the display 412 can be the touchscreen display of the smartphone.

FIG. 5 illustrates a representation of the indoor environment 100 in acoordinate plane 500. In one variation, the coordinate plane 500 can bea rectilinear two-dimensional Cartesian plane including an x-axis and ay-axis. In other variations, the system 300 can represent the indoorenvironment 100 in a three-dimensional coordinate system including anx-axis, a y-axis, and a z-axis.

As shown in FIG. 5, the indoor environment 100 can have a number ofpolygonal obstructions 102. For example, the indoor environment 100 canrepresent a retail store of approximately 5000 square meters.

The polygonal obstructions 102 can be physical barriers which hinder orimpede the movement of a user, vehicle, or machine carrying the device310 in the indoor environment 100. In one variation, the polygonalobstructions 102 can be substantially rectangular-shaped obstructionshaving an x-dimension (e.g., width) and a y-dimension (e.g., length). Inthis variation, the polygonal obstructions 102 can represent storeshelves, product displays, warehouse shelves, counters, rooms orcubicles, or a combination thereof within the indoor environment 100.

In other variations not shown in the figures but contemplated by thisdisclosure, at least part of the methods described herein can be appliedto polygonal obstructions 102 shaped as triangles, non-rectangularquadrilaterals such as trapezoids, rhombi, or parallelograms, pentagons,hexagons, heptagons, octagons, nonagons, or polygons having ten or moresides.

The system 300 can initially map the indoor environment 100 having thepolygonal obstructions 102 in the coordinate plane 500. The system 300can store the geometry of the indoor environment 100 including thecoordinates 502 of the borders 504 of the polygonal obstructions 102 andthe borders 504 of the indoor environment 100 in a database accessibleto the server 304. The system 300 can treat the polygonal obstructions102 as keep-out zones. As will be discussed in the following sections,the system 300 can consider a location of the device 310 as invalid whenthe coordinates 502 of the location is within the borders 504 of atleast one of the polygonal obstructions 102.

The system 300 can construct a floorplan of the indoor environment 100using digital images of the indoor environment 100. The system 300 canalso generate the polygonal obstructions 102 using automated featureextraction.

FIG. 6 illustrates a variation of the system 300 having 33 wirelesssignal transceivers 302 positioned throughout the indoor environment100. As can be seen in FIG. 6, the wireless signal transceivers 302 canbe placed on or above the polygonal obstructions 102. In othervariations, the wireless signal transceivers 302 can be placed on atleast one wall or ceiling of the indoor environment 100.

In one variation, the wireless signal transceivers 302 can besubstantially equally spaced from one another. In other variations, thewireless signal transceivers 302 can be evenly spaced within the indoorenvironment 100 without any significant concentrations or congregationsof wireless signal transceivers 302 in any one portion of the indoorenvironment 100.

In additional variations, the wireless signal transceivers 302 can becongregated in select sections of the indoor environment 100. Forexample, as depicted in FIG. 6, approximately one-third of the wirelesssignal transceivers 302 can be positioned on polygonal obstructions 102near one end of the indoor environment 100 and the remaining wirelesssignal transceivers 302 can be positioned on polygonal obstructions 102near the opposite end of the indoor environment 100. In this variation,two or three wireless signal transceivers 302 can also be placedsubstantially in the middle of the indoor environment 100 in between thetwo congregations of wireless signal transceivers 302.

FIG. 7 illustrates a variation of the system 300 having 87 wirelesssignal transceivers 302 positioned throughout the indoor environment100. As can be seen in FIG. 7, the wireless signal transceivers 302 canbe placed on or above the polygonal obstructions 102. In the variationshown in FIG. 7, the wireless signal transceivers 302 can be evenlyspaced within the indoor environment 100 and cover the entire indoorenvironment 100. Also, in this variation, each polygonal obstruction 102having a length dimension of at least 15 meters can have at least twowireless signal transceivers 302 positioned on or above the polygonalobstruction 102.

It should be understood by one of ordinary skill in the art thatalthough specific numbers of wireless signal transceivers 302 are shownin FIGS. 6 and 7, the actual number of wireless signal transceivers 302deployed can increase or decrease based on the size or dimensions of theindoor environment 100. In one variation, the system 300 can operatewith approximately one wireless signal transceiver per 50 square metersof the indoor environment 100. In another variation, the system 300 canoperate with approximately one wireless signal transceiver per 160square meters of the indoor environment 100. In other variations, thesystem 300 can operate with one wireless signal transceiver per 50 to160 square meters of the indoor environment 100. For example, the system300 can operate with approximately one wireless signal transceiver per57 square meters. Also, for example, the system 300 can operate withapproximately one wireless signal transceiver per 150 square meters ofthe indoor environment 100.

FIG. 8 illustrates the system 300 determining an estimated location ofthe device 310 using signal strength profiles 800. For example, theestimated location of the device 310 can be used as a raw estimatedlocation 900 (see FIGS. 9, 10A, 10B, 11A, 11B, 12A, and 12B). In onevariation, the server 304 can receive a signal strength profile 800 fromthe device 310 located in the indoor environment 100. The signalstrength profile 800 can include measurements of the radio signalstrengths of the wireless signal transceivers 302 positioned throughoutthe indoor environment 100. The signal strength profile 800 can includereceived signal strength indicators (RSSIs) measured in decibelsrelative to a reference level (dBr). The signal strengths 802 can be thepower of the received radio signals measured at the device 310 at aspecific location in the indoor environment 100. The signal strengths802 of the wireless signal transceivers 302 can change as the locationof the device 310 in the indoor environment 100 changes due to amovement of a user or vehicle carrying the device 310.

For example, when the wireless signal transceivers 302 are WiFi accesspoints, the signal strength profile 800 can be a WiFi fingerprint of thevarious WiFi access points in the indoor environment 100. As shown inFIG. 8, a variation of the system 300 can have 87 WiFi access pointslocated throughout the indoor environment 100. The WiFi access pointscan be positioned in the indoor environment 100 substantially equivalentto the arrangement shown in FIG. 7.

As depicted in FIG. 8, the signal strengths 802 of the wireless signaltransceivers 302 measured by the device 310 can change as the locationof the device 310 changes in the indoor environment 100. For example,the device 310 can change location as a user carrying the device 310moves down an aisle or walkway of the indoor environment 100.

After receiving the signal strength profile 800 from the device 310, theprocessing unit 400 of the server 304 can be programmed to determine theraw estimated location 900 of the device 310 in the coordinate plane 500representing the indoor environment 100 by using a K-nearest neighbor(KNN) algorithm to compare the signal strength profile 800 withreference profiles 806 stored in a database 804. In one variation, theserver 304 can be programmed to determine the raw estimated location 900of the device 310 in the coordinate plane 500 representing the indoorenvironment 100 by using a weighted K-nearest neighbor (WKNN) algorithmto compare the signal strength profile 800 with reference profiles 806stored in the database. For example, the WKNN algorithm can use K=4neighbors.

For example, the system 300 can determine the raw estimated location 900of the device 310 in the indoor environment 100 using a variation of theweighted K-nearest neighbor algorithms described in Shin, Beomju, et al.“Enhanced weighted K-nearest neighbor algorithm for indoor Wi-Fipositioning systems.” Computing Technology and Information Management(ICCM), 2012 8th International Conference on. Vol. 2. IEEE, 2012;Yassin, Mohamad, and Elias Rachid. “A survey of positioning techniquesand location based services in wireless networks.” Signal Processing,Informatics, Communication and Energy Systems (SPICES), 2015 IEEEInternational Conference; Tsai, W. M., L. T. Hsu, and S. S. Jan. “Thedevelopment of an indoor location based service test bed.” Proceedingsof the 22nd International Technical Meeting of the Satellite Division ofthe Institute of Navigation (ION GNSS 2009) 2001; Bahl, Paramvir, andVenkata N. Padmanabhan. “RADAR: An in-building RF-based user locationand tracking system.” INFOCOM 2000. Nineteenth Annual Joint Conferenceof the IEEE Computer and Communications Societies. Proceedings. IEEE.Vol. 2. IEEE, 2000; and Li, Binghao, et al. “Method for yielding adatabase of location fingerprints in WLAN.” IEEProceedings-Communications 152.5 (2005): 580-586, the contents of whichare hereby incorporated by reference in their entireties.

The reference profiles 806 can be previously measured signal strengthsof the same wireless signal transceivers 302 positioned within the sameindoor environment 100. The previously measured signal strength profilescan be stored in a database 804 accessible to the server 304. In othervariations, the reference profiles 806 can be previously measured signalstrengths of different wireless signal transceivers 302 positionedwithin the same or similar indoor environment 100 in substantially thesame arrangement. In yet another variation, the reference profiles 806can be previously measured signal strengths of different wireless signaltransceivers 302 positioned within an indoor environment 100 ofsubstantially the same size or shape. The system 300 can populate thedatabase 804 with the reference profiles 806 prior to receiving thesignal strength profile 800 from the device 310.

In one variation, the database 804 can be stored in the memory unit 402.In another variation, the database 804 can be stored in a cloud storagesystem accessible to the server 304. In one variation, the database 804can be one or more SQL databases. In other variations, the database 804can be one or more document-oriented databases such as a NoSQL database.

In an alternative variation, the system 300 can receive a signalstrength profile of the device 310 from the network of wireless signaltransceivers 302. In this variation, the signal strength profile of thedevice 310 can include measurements of the signal strength of the device310 as measured by the wireless signal transceivers 302. In this sense,the system 300 is essentially measuring the beacon-to-device path loss,which is irrespective of the source or destination of the signal.

FIG. 9 illustrates the system 300 performing an initial check of the rawestimated location 900 determined based on the signal strength profile800 received from the device 310. FIG. 9 illustrates one scenario inwhich the raw estimated location 900 is located inside a polygonalobstruction 102 and another scenario in which the raw estimated location900 is located in an aisle or walkway of the indoor environment 100outside of any of the polygonal obstructions 102.

The processing unit 400 of the server 304 can be programmed to comparethe raw estimated location 900 of the device 310 in the coordinate plane500 with coordinates 502 representing borders 504 of the polygonalobstructions 102. When the processing unit 400 determines the rawestimated location 900 is within the borders 504 of one of the polygonalobstructions 102, the processing unit 400 can adjust at least onecoordinate of the raw estimated location 900 to place the raw estimatedlocation 900 outside of the borders 504 of the polygonal obstruction102.

For example, the server 304 can execute the following code in order todetermine whether the raw estimated location 900 is on or within theborders 504 of one of the polygonal obstructions 102:

if inpolygon(x_raw, y_raw, keepouts_x, keepouts_y) == true    [x_raw,y_raw] = polyout(x_raw, y_raw, keepouts_x,    keepouts_y); end

In the above example code, the inpolygon( ) function serves to determinewhether the raw estimated location 900 is inside or on one of thepolygonal obstructions 102, the polyout( ) function returns the nearestpoint outside of a polygon obstruction 102 to a point inside thatparticular polygonal obstruction 102, and keepouts_x and keepouts_y arevectors of x-coordinates and y-coordinates, respectively, representingthe polygonal obstructions 102. For example, the system 300 can adjustany of the x-coordinate, the y-coordinate, or both the x-coordinate andthe y-coordinate of a raw estimated location 900 which is found to be onor inside a polygonal obstruction 102 to a location immediately outsideof the polygonal obstruction 102. If the raw estimated location 900 isnot determined to be within or on one of the polygonal obstructions 102,the system 300 can proceed to the next step of the process.

Although the code sections presented in this disclosure are written inthe MATLAB® programming language, it should be understood by one ofordinary skill in the art that the methods and systems described hereincan be implemented in other programing languages including the Python,C, C++, or Java® programming languages.

FIGS. 10A and 10B illustrate the system 300 evaluating straight-linepaths 1000 from an immediately preceding location 1002 to a rawestimated location 900. The immediately preceding location 1002 can be aprior location of the device 310 determined using the filtering methodsdescribed in the following sections. For example, the immediatelypreceding location 1002 can be a previously calculated weighted-averagelocation 1300 (see FIG. 13) of the device 310. The immediately precedinglocation 1002 can be represented by the coordinates [X1, Y1] in FIGS.11A, 11B, 12A, and 12B.

The processing unit 400 of the server 304 can be programmed to calculatea straight-line path 1000 in the coordinate plane 500 from theimmediately preceding location 1002 to the raw estimated location 900.The processing unit 400 of the server 304 can be programmed to selectthe raw estimated location 900 as a candidate location 1004 when thestraight-line path 1000 connects the immediately preceding location 1002and the raw estimated location 900 without intersecting any of thepolygonal obstructions 102 in the coordinate plane 500.

As can be seen in FIG. 10A, the system 100 can select the raw estimatedlocation 900 as the candidate location 1004 when a straight-line path1000 connects the two locations without intersecting any part of apolygonal obstruction 102 in the indoor environment 100.

For example, the server 304 can execute the following code in order todetermine whether a straight-line path 1000 connects the immediatelypreceding location 1002 and the raw estimated location 900 withoutintersecting any of the polygonal obstructions 102:

if isempty(polyxpoly([x_old x_raw], [y_old y_raw], keepouts_x,keepouts_y))    [x_est, y_est] = LPF(dt, x_old, y_old, x_raw, y_raw,p_gain,    v_lim);

In the above example code, the polyxpoly( ) function returns the set ofintersection point(s) of two polylines in a planar Cartesian system, theisempty( ) function is true when that set is the null set, x_old andy_old represent the immediately preceding location 1002, x_raw and y_rawrepresent the raw estimated location 900, and x_est and y_est representthe candidate location 1004. When the system 300 determines astraight-line path 1000 can connect the immediately preceding location1002 with the raw estimated location 900 without intersecting any of thepolygonal obstructions 102 in the indoor environment 100, the system 300can select the raw estimated location 900 as the candidate location 1004and pass the coordinates of the candidate location 1004 and an elapsedtime, dt, to a low-pass filter function, LPF( ) to evaluate thefeasibility of the estimated location of the device 310. The low-passfilter function will be discussed in the following sections.

FIGS. 11A and 11B illustrate the system 300 generating interlinkingpoints 1100 between an immediately preceding location 1002 and a rawestimated location 900. The processing unit 400 of the server 304 cangenerate an interlinking point 110 when the straight-line path 1000connecting the immediately preceding location 1002 and the raw estimatedlocation 900 intersects at least one part of a polygonal obstruction 102in the coordinate plane 500 representing the indoor environment 100.

The processing unit 400 of the server 304 can be programmed to generatethe interlinking point 1100 using an x-axis coordinate 1102 of theimmediately preceding location 1002 and a y-axis coordinate 1104 of theraw estimated location 900. Upon generating the interlinking point 1100,the processing unit 400 can be programmed to then evaluate theinterlinking point 1100 by calculating a first linear segment 1106connecting the immediately preceding location 1002 with the interlinkingpoint 1100. The processing unit 400 can be programmed to then calculatea second linear segment 1108 connecting the interlinking point 1100 withthe raw estimated location 900. The processing unit 400 can beprogrammed to select the interlinking point 1100 as the candidatelocation 1004 when the first linear segment 1106 and the second linearsegment 1108 do not intersect any part of a polygonal obstruction 102 inthe coordinate plane 500.

If any of the first linear segment 1106 and the second linear segment1108 intersects at least one of the polygonal obstructions 102 in thecoordinate plane 500, the processing unit 400 can be programmed togenerate another instance of the interlinking point 110 using the y-axiscoordinate 1104 of the immediately preceding location 1002 and thex-axis coordinate 1102 of the raw estimated location 900. Upongenerating this instance of the interlinking point 1100, the processingunit 400 can be programmed to evaluate this instance of the interlinkingpoint 1100 by calculating a first linear segment 1106 connecting theimmediately preceding location 1002 with this instance of theinterlinking point 1100. The processing unit 400 can be programmed tothen calculate a second linear segment 1108 connecting this instance ofthe interlinking point 1100 with the raw estimated location 900. Theprocessing unit 400 can be programmed to select this instance of theinterlinking point 1100 as the candidate location 1004 when the firstlinear segment 1106 and the second linear segment 1108 do not intersectany part of a polygonal obstruction 102 in the coordinate plane 500. Ascan be seen in FIGS. 11A and 11B, selecting the interlinking point 1100as the candidate location 1004 prevents the route of the user, vehicle,or machine carrying the device 310 from traversing through any physicalbarriers in the indoor environment 100.

For example, server 304 can execute the following code in order togenerate and evaluate the interlinking point 1100:

if isempty(polyxpoly([x_old x_old], [y_old y_raw], keepouts_x,keepouts_y)) &&  isempty(polyxpoly([x_old x_raw], [y_raw y_raw],keepouts_x, keepouts_y))    [x_est, y_est] = LPF(dt, x_old, y_old,x_old, y_raw, p_gain, v_lim); elseif isempty(polyxpoly([x_old x_raw],[y_old y_old], keepouts_x, keepouts_y)) &&  isempty(polyxpoly([x_rawx_raw], [y_old y_raw], keepouts_x, keepouts_y))    [x_est, y_est] =LPF(dt, x_old, y_old, x_raw, y_old, p_gain, v_lim);

In the above example code, x_old and y_old represent the immediatelypreceding location 1002, x_raw and y_raw represent the raw estimatedlocation 900, and x_est and y_est represent the candidate location 1004.When the interlinking point 1100 is selected as the candidate location1004, the processing unit 400 of the server 304 can be programmed topass the coordinates of the interlinking point 1100 and an elapsed time,dt, to a low-pass filter function, LPF( ), to evaluate the practicalityof the estimated location of the device 310.

FIGS. 12A and 12B illustrate the system 300 evaluating polyline pathsfrom the immediately preceding location 1002 and the raw estimatedlocation 900 using artery lanes. The processing unit 400 of the server304 can evaluate polyline paths when an interlinking point 1100 cannotbe generated in which a first linear segment 1106 connecting theimmediately preceding location 1002 and the interlinking point 1100 anda second linear segment 1108 connecting the interlinking point 1100 andthe raw estimated location 900 do not intersect any part of a polygonalobstruction 102 in the coordinate plane 500.

The processing unit 400 of the server 304 can be programmed to determinea first polyline path 1206 from the immediately preceding location 1002to the raw estimated location 900 wherein a portion of the firstpolyline path 1206 traverses a first artery lane 1200 in the indoorenvironment 100. As illustrated in FIGS. 12A and 12B, the artery lanes,including the first artery lane 1200, the second artery lane 1202, orthe third artery lane 1204, can represent major aisles or walkways inthe indoor environment 100. For example, the artery lanes, including anyof the first artery lane 1200, the second artery lane 1202, or the thirdartery lane 1204, can be an aisle, a walkway, or a path connecting atleast two or more other aisles, walkways, or paths in the indoorenvironment 100. In other variations, the artery lanes can be aisles,walkways, or paths extending from one side of the indoor environment 100to the other or connecting one entrance or exit of the indoorenvironment 100 with another entrance or exist of the indoor environment100. The artery lanes can be substantially parallel to at least one ofthe x-coordinate axis or the y-coordinate axis in the coordinate plane500.

The polyline paths, such as the first polyline path 1206 and the secondpolyline path 1208, are routes or potential routes from one location inthe coordinate plane 500 representing the indoor environment 100 toanother location in the coordinate plane 500 which include at least twointerconnected straight-line segments. Each of the polyline paths cantraverse at least a portion of one artery lane in the indoor environment100.

The coordinates 502 of the artery lanes can be predetermined by thesystem 300 and stored in the database 804. Although three artery lanesare shown in FIG. 12A and 12B, it should be understood by one orordinary skill in the art that the system 300 can operate in indoorenvironments 100 having any number of artery lanes including between 4and 100 artery lanes.

Upon determining the first polyline path 1206, the processing unit 400of the server 304 can be programmed to determine a second polyline path1208 from the immediately preceding location 1002 to the raw estimatedlocation 900 wherein a portion of the second polyline path 1208traverses a second artery lane 1202 in the indoor environment 100. Whenthe indoor environment 100 has only two artery lanes, the processingunit 400 of the server 304 can be programmed to select the first arterylane 1200 as a preferred artery lane 1212 when the first polyline path1206 is shorter than the second polyline path 1208. Alternatively, theprocessing 400 of the server 304 can select the second artery lane 1202as the preferred artery lane 1212 when the second polyline path 1208 isshorter than the first polyline path 1206.

The processing unit 400 of the server 304 can be programmed to thengenerate an artery entrance location 1214 using an x-axis coordinate1102 of the immediately preceding location 1002 and a y-axis coordinate1104 of the preferred artery lane 1212 or using the y-axis coordinate1104 of the immediately preceding location 1002 and the x-axiscoordinate 1102 of the preferred artery lane 1212. The processing unit400 of the server 304 can be programmed to select the artery entrancelocation 1214 as the candidate location 1004 when a straight-linesegment 1216 connecting the immediately preceding location 1002 to theartery entrance location 1214 does not intersect any part of a polygonalobstruction 102 in the coordinate plane 500.

When the indoor environment 100 has three or more artery lanes, as shownin FIGS. 12A and 12B, the processing unit 400 of the server 304 can beprogrammed to determine at least one polyline path from the immediatelypreceding location 1002 to the raw estimated location 900 for each ofthe artery lanes. For example, as shown in FIGS. 12A and 12B, theprocessing unit 400 of the server 304 can be programmed to determine thefirst polyline path 1206 traversing at least a portion of the firstartery lane 1200, the second polyline path 1208 traversing at least aportion of the second artery lane 1202, and a third polyline path 1210traversing at least a portion of the third artery lane 1204. Theprocessing unit 400 of the server 304 can be programmed to thendetermine the shortest polyline path out of the three or more polylinepaths and select the artery lane associated with the shortest polylinepath as the preferred artery lane 1212.

The processing unit 400 of the server 304 can be programmed to thengenerate the artery entrance location 1214 using the x-axis coordinate1102 of the immediately preceding location 1002 and the y-axiscoordinate 1104 of the preferred artery lane 1212 or using the y-axiscoordinate 1104 of the immediately preceding location 1002 and thex-axis coordinate 1102 of the preferred artery lane 1212. The processingunit 400 of the server 304 can be programmed to select the arteryentrance location 1214 as the candidate location 1004 when astraight-line segment 1216 connecting the immediately preceding location1002 to the artery entrance location 1214 does not intersect any part ofa polygonal obstruction 102 in the coordinate plane 500.

When the processing unit 400 of the server 304 determines thestraight-line segment 1216 connecting the immediately preceding location1002 to the artery entrance location 1214 intersects any part of apolygonal obstruction 102 in the coordinate plane 500, the processingunit 400 of the server 304 can determine a laterally displaced location1218 using the y-axis coordinate 1104 of the immediately precedinglocation 1002 and the x-axis coordinate 1104 of the raw estimatedlocation 900.

Depending on the geometry of the indoor environment 100 and the geometryor arrangement of the polygonal obstructions 102, the processing unit400 can determine a longitudinally displaced location using the x-axiscoordinate 1102 of the immediately preceding location 1002 and they-axis coordinate 1104 of the raw estimated location 900. In any case, astraight-line segment connecting the immediately preceding location 1002and either the laterally displaced location 1218 or the longitudinallydisplaced location cannot intersect any part of a polygonal obstruction102 in the coordinate plane 500 representing the indoor environment 100.

For example, server 304 can execute the following code in order todetermine the polyline paths, selecting the artery entrance location1214, or selecting the laterally displaced location 1218:

dist = abs(arteries_y − y_old) + abs(arteries_y − y_raw); [~,idx] =min(dist); y_trial = arteries_y(idx); [x_est_trial, y_est_trial] =LPF(dt, x_old, y_old, x_old, y_trial, p_gain, v_lim); ifisempty(polyxpoly([x_old x_est_trial], [y_old y_est_trial], keepouts_x,keepouts_y))    x_est = x_est_trial;    y_est = y_est_trial; else   [x_est, y_est] = LPF(dt, x_old, y_old, x_raw, y_old, p_gain, v_lim);end

In the above example code, x_old and y_old represent the immediatelypreceding location 1002, x_raw and y_raw represent the raw estimatedlocation 900, and x_est and y_est represent the candidate location 1004.When either the artery entrance location 1214 or the laterally displacedlocation 1218 is selected as the candidate location 1004, the processingunit 400 of the server 304 can be programmed to pass the coordinates ofeither the artery entrance location 1214 or the laterally displacedlocation 1218 and an elapsed time, dt, to a low-pass filter function,LPF( ) to evaluate the practicality of the estimated location of thedevice 310.

FIG. 13A and 13B illustrate the system 300 calculating theweighted-average location 1300 and comparing a hypothetical velocity1302 with a saturation velocity 1304 in order to evaluate thepracticality of the estimated location of the device 310. The system 300can calculate the weighted-average location 1300 and compare ahypothetical velocity 1302 with a saturation velocity 1304 as part of alow-pass smoothing filter function used to evaluate the practicality ofthe estimated location of the device 310.

Once a candidate location 1004 is set or selected, the processing unit400 of the server 304 can be programmed to calculate a weighted-averagelocation 1300 using the immediately preceding location 1002 and thecandidate location 1004. Depending on the results of the algorithm stepsdescribed herein, the candidate location 1004 can be the raw estimatedlocation 900, the location of the interlinking point 1100, arteryentrance location 1214, or the laterally displaced location 1218. Thesystem 300 can use any number of weighted-average formulas to calculatethe weighted-average location 1300 using the immediately precedinglocation 1002 and the candidate location 1004.

The processing unit 400 of the server 304 can be programmed to thencalculate a hypothetical velocity 1302 using an elapsed time 1308 (dt orT_(elapsed)) and the distance 1310 separating the immediately precedinglocation 1002 and the weighted average location 1300. When theprocessing unit 400 can be programmed to then compare the hypotheticalvelocity 1302 with a saturation velocity 1304.

The saturation velocity 1304 is a predetermined velocity establishedusing known limits or constraints, average or median speeds orvelocities, or a combination thereof. For example, the saturationvelocity 1304 can be between 1.0 meter to 3.0 meters per second. As amore specific example, the saturation velocity 1304 can be the averagewalking speed of a human being, or between 1.3 meters per second to 1.5meters per second. In other variations, the saturation velocity 1304 canbe predetermined based on the type of vehicle or entity carrying thedevice 310. For example, when the entity carrying the device 310 is adrone or robotic vehicle, the saturation velocity 1304 can be set basedon the average or maximum velocity of such a drone or robotic vehicle.

The processing unit 400 can be programmed to compare the hypotheticalvelocity 1302 with the saturation velocity 1304 and store theweighted-average location 1300 as a new location 1314 of the device 310when the hypothetical velocity 1302 is less than or equal to thesaturation velocity 1304 as shown in FIG. 13A. Alternatively, when theprocessing unit 400 determines the hypothetical velocity 1302 is greaterthan the saturation velocity 1304 as shown in FIG. 13B, the processingunit 400 can be programmed to calculate a saturated location 1306 usingthe saturation velocity 1304, the elapsed time 1308, and the immediatelypreceding location 1002. The saturated location 1306 can be calculatedby first calculating a displacement distance by multiplying thesaturation velocity 1304 by the elapsed time 1308 and advancing thedevice 310 in the direction of the weighted average location 1300 by thedisplacement distance.

For example, the server 304 can execute the following code in order todetermine the new location 1314:

dx = p_gain * (x_raw − x_old); dy = p_gain * (y_raw − y_old); dt = t_new− t_old; v = hypot(dx, dy) / dt; if v <= v_lim   x_new = x_old + dx;  y_new = y_old + dy; else   x_new = x_old + dx*(v_lim/v);   y_new =y_old + dy*(v_lim/v); end

The new location 1314 can be the location of the device 310 calculatedusing the above mentioned steps. The processing unit 400 of the server304 can be programmed to then store the new location 1314 as the currentlocation of the device 310 in the database 804 or another databaseaccessible to the server 304. The system 300 can display the newlocation 1314 on a display of a device in communication with the server304 or transmit the new location 1314 to a device in communication withthe server 304.

Upon determining the new location 1314, the processing unit 400 can beprogrammed to do a final check to ensure the new location 1314 is notinside or on one of the polygonal obstructions 102 in the indoorenvironment 100. For example, the server 304 can execute the followingcode to ensure the new location 1314 is not inside or one of thepolygonal obstructions 102:

if inpolygon(x_est, y_est, keepouts_x, keepouts_y) == true    [x_est,y_est] = polyout(x_est, y_est, keepouts_x, keepouts_y); end

As indicated above, if the processing unit 400 determines the newlocation 1314 is on or inside a polygonal obstruction 102, theprocessing unit 400 can pass the coordinates of the new location 1314 tothe polyout( ) function to return a different set of coordinatesimmediately outside of the polygonal obstruction 102.

Once the server 304 determines the new location 1314 of the device 310,the server 304 can use the new location 1314 as a new instance of theimmediately preceding location 1002. In doing so, the system 300 is ableto improve the accuracy of its location estimates by continuouslyrefining the inputs fed into the algorithm.

FIG. 14 illustrates a representation of a filtered route 1400 generatedby the system 300 using the methods described herein. The filtered route1400 can be constructed using current and all preceding instances of thenew location 1314 of the device 310 calculated by the system 300. Whencomparing the filtered route 1400 of FIG. 14 with the estimated routes104 depicted in FIGS. 1 and 2, it is apparent that the methods andsystems described herein provide improvements in the field of indoorlocalization. Moreover, the methods and systems described herein provideimprovements in the field of indoor localization when the indoorenvironment 100 contains polygonal obstructions 102 serving as physicalbarriers hindering or impeding the movement of a user, vehicle, orentity carrying the device 310 in the indoor environment 100.

In addition, the methods and algorithms described herein are robust,efficient, and provide a more accurate estimate of the location of aportable wireless device in an indoor environment 100 than traditionallocalization methods using wireless fingerprinting. Furthermore, themethods and systems described herein can be used with currently deployedwireless signal transceivers 302 and are cost-effective when compared toexpensive and complicated beacon or device-proximity networks.

FIG. 15 is a flowchart representing a variation of a method 1500undertaken by the system 300. The method 1500 can involve determiningwhether a raw estimated location 900 of the device 310 is within or on aborder 504 of a polygonal obstruction 102 in the coordinate plane 500 inoperation 1502. If the raw estimated location 900 is determined to be onor within a polygonal obstruction 102, the method 1500 can involveadjusting the coordinates 502 of the raw estimated location 900 to thenearest point outside of the polygonal obstruction 102 in operation1504. If the raw estimated location 900 is not determined to be on orwithin a polygonal obstruction 102, the method 1500 can involvedetermining the coordinates 502 of an immediately preceding location1002 and an elapsed time 1308 between receiving the signal strengthprofiles 800 of the immediately preceding location 1002 and the rawestimated location 900 in operation 1506.

The method 1500 can further involve determining whether a straight-linepath 1000 connects the immediately preceding location 1002 and the rawestimated location 900 without intersecting any of the polygonalobstructions 102 in operation 1508. If the straight-line path 1000connects the two locations without intersecting a polygonal obstruction102, the method 1500 can proceed to calculating a weighted-averagelocation 1300 using the raw-estimated location 900 as the candidatelocation 1004 in operation 1510. Operation 1510 can also involvecomparing a hypothetical velocity 1302 calculated using theweighted-average location 1300 and the immediately preceding location1002 with a saturation velocity 1304. The method 1500 can furtherinvolve storing the candidate location 1004 as the new location 1314 orstoring a calculated saturated location 1306 as the new location 1314 inoperation 1512.

If the straight-line path 1000 from operation 1508 intersects at leastone polygonal obstruction 102, the method 1500 can involve generating aninterlinking point 1100 using the x-axis coordinate 1102 of theimmediately preceding location 1002 and the y-axis coordinate 1104 ofthe raw estimated location 900 in operation 1514 or the y-axiscoordinate 1104 of the immediately preceding location 1002 and thex-axis coordinate 1102 of the raw estimated location 900 in operation1520. Operation 1514 or operation 1520 can also involve selecting theinterlinking point 1100 as the candidate location 1004 when a firstlinear segment 1106 connecting the immediately preceding location 1002and the interlinking point 1100 does not intersect any of the polygonalobstructions 102 and a second linear segment 1108 connecting the rawestimated location 900 and the interlinking point 1100 does notintersect any of the polygonal obstructions 102. If the first linearsegment 1106 and the second linear segment 1108 do not intersect any ofthe polygonal obstructions 102, the method 1500 can involve calculatingthe weighted-average location 1300 using the immediately precedinglocation 1002 and the interlinking point 1100 as the candidate location1004 in operation 1510 or operation 1516. The method 1500 can furtherinvolve comparing a hypothetical velocity 1302 calculated using theweighted-average location 1300 and the immediately preceding location1002 with a saturation velocity 1304 and storing the candidate location1004 as the new location 1314 or storing a calculated saturated location1306 as the new location 1314 in operation 1512 or operation 1518.

If the first linear segment 1106 and the second linear segment 1108cannot connect the interlinking point 1100 with the immediatelypreceding location 1002 and the raw estimated location 900,respectively, without intersecting a polygonal obstruction 102, themethod 1500 can involve determining polyline paths from the immediatelypreceding location 1002 to the raw estimated location 900 wherein aportion of the polyline paths traverses at least one artery lane inoperation 1522. The method 1500 can further involve selecting theshortest polyline path where the shortest polyline path traverses atleast a portion of an artery lane and selecting such an artery lane asthe preferred artery lane 1212 in operation 1524. The method 1500 canfurther involve establishing an artery entrance location 1214 using thex-axis coordinate 1102 of the immediately preceding location 1002 andthe y-axis coordinate 1104 of the preferred artery lane 1212 or usingthe y-axis coordinate 1104 of the immediately preceding location 1002and the x-axis coordinate 1102 of the preferred artery lane 1212 inoperation 1526.

The method 1500 can further involve selecting the artery entrancelocation 1214 as the candidate location 1004 when a straight-linesegment 1216 can connect the immediately preceding location 1002 to theartery entrance location 1214 without intersecting a polygonalobstruction 102 in operation 1528. The method 1500 can involvecalculating the weighted-average location 1300 using the immediatelypreceding location 1002 and the artery entrance location 1214 as thecandidate location 1004 in operation 1530. The method 1500 can furtherinvolve comparing a hypothetical velocity 1302 calculated using theweighted-average location 1300 and the immediately preceding location1002 with a saturation velocity 1304 and storing the candidate location1004 as the new location 1314 or storing a calculated saturated location1306 as the new location 1314 in operation 1532.

If the straight-line segment 1216 intersects a part of a polygonalobstruction 102, the method 1500 can involve determining a laterallydisplaced location 1218 using the y-axis coordinate 1104 of theimmediately preceding location 1002 and the x-axis coordinate 1102 ofthe raw estimated location 900 in operation 1534. The method 1500 canfurther involve calculating the weighted-average location 1300 using theimmediately preceding location 1002 and the laterally displaced location1218 as the candidate location 1004 in operation 1536. The method 1500can further involve comparing a hypothetical velocity 1302 calculatedusing the weighted-average location 1300 and the immediately precedinglocation 1002 with a saturation velocity 1304 and storing the candidatelocation 1004 as the new location 1314 or storing a calculated saturatedlocation 1306 as the new location 1314 in operation 1538.

A number of embodiments have been described. Nevertheless, it will beunderstood by one of ordinary skill in the art that variousmodifications may be made without departing from the spirit and scope ofthe embodiments. In addition, the flowcharts or logic flows depicted inthe figures do not require the particular order shown, or sequentialorder, to achieve desirable results. In addition, other steps oroperations may be provided, or steps or operations may be eliminated,from the described flows, and other components may be added to, orremoved from, the described systems. Accordingly, other embodiments arewithin the scope of the following claims.

It will be understood by one of ordinary skill in the art that thevarious methods disclosed herein may be embodied in a non-transitoryreadable medium, machine-readable medium, and/or a machine accessiblemedium comprising instructions compatible, readable, and/or executableby a processor or processing unit of a machine, device, or computingdevice. The structures and modules in the figures may be shown asdistinct and communicating with only a few specific structures and notothers. The structures may be merged with each other, may performoverlapping functions, and may communicate with other structures notshown to be connected in the figures. Accordingly, the specificationand/or drawings may be regarded in an illustrative rather than arestrictive sense.

1. A system to localize a device in an indoor environment, the systemcomprising: wireless signal transceivers positioned in the indoorenvironment and configured to transmit a signal to the device or receivea signal from the device, wherein the indoor environment contains one ormore polygonal obstructions; a server comprising a processing unit, amemory unit, and a server communication unit, and the processing unit isprogramed to: receive a signal strength profile from at least one of thedevice and the wireless signal transceivers, wherein the signal strengthprofile includes at least one of signal strengths of the signaltransmitted by the wireless signal transceivers to the device in theindoor environment and signal strengths of the signal from the devicereceived at the wireless signal transceivers in the indoor environment;determine a raw estimated location of the device in a coordinate planerepresenting the indoor environment by using a K-nearest neighbor (KNN)algorithm to compare the signal strength profile with reference profilesstored in a database; calculate a straight-line path in the coordinateplane from an immediately preceding location of the device to the rawestimated location; select the raw estimated location as a candidatelocation when the straight-line path connects the immediately precedinglocation and the raw estimated location without intersecting any of thepolygonal obstructions in the coordinate plane; generate an interlinkingpoint using an x-axis coordinate of the immediately preceding locationand a y-axis coordinate of the raw estimated location or the y-axiscoordinate of the immediately preceding location and the x-axiscoordinate of the raw estimated location; calculate a first linearsegment connecting the immediately preceding location and theinterlinking point and a second linear segment connecting the rawestimated location and the interlinking point; select the interlinkingpoint as the candidate location when; a first linear segment connectsthe immediately preceding location and the interlinking point withoutintersecting any of the polygonal obstructions, and a second linearsegment connects the raw estimated location and the interlinking pointwithout intersecting any of the polytonal obstructions; calculate aweighted-average location using the immediately preceding location andthe candidate location; and store the weighted-average location as a newlocation of the device in the indoor environment when a hypotheticalvelocity calculated using an elapsed time and a distance separating theimmediately preceding location and the weighted-average location is lessthan or equal to a saturation velocity.
 2. (canceled)
 3. The system ofclaim 1, wherein the processing unit is further programmed to: determinea first polyline path from the immediately preceding location to the rawestimated location, wherein a portion of the first polyline pathtraverses a first artery lane in the indoor environment; determine asecond polyline path from the immediately preceding location to the rawestimated location, wherein a portion of the second polyline pathtraverses a second artery lane in the indoor environment; and select thefirst artery lane as a preferred artery lane when the first polylinepath is shorter than the second polyline path; select the second arterylane as the preferred artery lane when the second polyline path isshorter than the first polyline path; generate an artery entrancelocation using an x-axis coordinate of the immediately precedinglocation and a y-axis coordinate of the preferred artery lane or usingthe y-axis coordinate of the immediately preceding location and thex-axis coordinate of the preferred artery lane; and select the arteryentrance location as the candidate location.
 4. The system of claim 3,wherein the processing unit is further programmed to: calculate astraight-line segment from the immediately preceding location to theartery entrance location prior to selecting the artery entrance locationas the candidate location; determine a laterally displaced location whenthe straight-line segment intersects any of the polygonal obstructions,wherein the laterally displaced location is determined using a y-axiscoordinate of the immediately preceding location and an x-axiscoordinate of the raw estimated location; and select the laterallydisplaced location as the candidate location.
 5. The system of claim 1,wherein the processing unit is further programmed to: compare the rawestimated location of the device in the coordinate plane withcoordinates representing borders of the polygonal obstructions prior tocalculating the straight-line path; determine the raw estimated locationis within the borders of one of the polygonal obstructions; adjust atleast one coordinate of the raw estimated location to place the rawestimated location outside of the borders of the polygonal obstruction.6. The system of claim 1, wherein the processing unit is furtherprogrammed to: set a saturated location as the new location of thedevice when the hypothetical velocity calculated using the elapsed timeand the distance separating the immediately preceding location and theweighted-average location is greater than the saturation velocity,wherein the saturated location is generated using, the saturationvelocity, and wherein the saturated location is closer in distance tothe immediately preceding location than the weighted-average location.7. The system of claim 1, wherein the indoor environment comprisesbetween one wireless signal transceiver per 150 square meters and onewireless signal transceiver per 57 square meters.
 8. The system of claim1, wherein the wireless signal transceivers include at least one of Wifiaccess points and Bluetooth® beacons.
 9. A computer-implemented methodto localize a device in an indoor environment, the method comprising:receiving, at a server, a signal strength profile, wherein the signalstrength profile includes at least one of signal strengths of wirelesssignal transceivers received at the device in the indoor environment andsignal strengths of the device received at wireless signal transceiversin the indoor environment, and wherein the indoor environment containsone or more polygonal obstructions; determining, using a processing unitof the server, a raw estimated location of the device in a coordinateplane representing the indoor environment by using a K-nearest neighbor(KNN) algorithm to compare the signal strength profile with referenceprofiles stored in a database; calculating, using the processing unit ofthe server, a straight-line path in the coordinate plane from animmediately preceding location of the device to the raw estimatedlocation; selecting, using the processing unit of the server, the rawestimated location as a candidate location when the straight-line pathconnects the immediately preceding location and the raw estimatedlocation without intersecting any of the polygonal obstructions in thecoordinate plane; generating, using the processing unit of the server,an interlinking point using an x-axis coordinate of the immediatelypreceding location and a y-axis coordinate of the raw estimated locationor the y-axis coordinate of the immediately preceding location and thex-axis coordinate of the raw estimated location; calculating, using theprocessing, unit of the server, a first linear segment connecting theimmediately preceding location and the interlinking point and a secondlinear segment connecting the raw estimated location and theinterlinking point; selecting, using the processing unit of the server,the interlinking point as the candidate location when: a first linearsegment connects the immediately preceding location and the interlinkingpoint without intersecting any of the polygonal obstructions, and asecond linear segment connects the raw estimated location and theinterlinking point without intersecting any of the polygonalobstructions; calculating, using the processing unit of the server, aweighted-average location using the immediately preceding location andthe candidate location; and storing, using the processing unit of theserver, the weighted-average location as a new location of the device inthe indoor environment when a hypothetical velocity calculated using anelapsed time and a distance separating the immediately precedinglocation and the weighted-average location is less than or equal to asaturation velocity.
 10. (canceled)
 11. The computer-implemented methodof claim 9, further comprising: determining, using the processing unitof the server, a first polyline path from the immediately precedinglocation to the raw estimated location, wherein a portion of the firstpolyline path traverses a first artery lane in the indoor environment;determining, using the processing unit of the server, a second polylinepath from the immediately preceding location to the raw estimatedlocation, wherein a portion of the second polyline path traverses asecond artery lane in the indoor environment; and selecting, using theprocessing unit of the server, the first artery lane as a preferredartery lane when the first polyline path is shorter than the secondpolyline path; selecting, using the processing unit of the server, thesecond artery lane as the preferred artery lane when the second polylinepath is shorter than the first polyline path; generating, using theprocessing unit of the server, an artery entrance location using anx-axis coordinate of the immediately preceding location and a y-axiscoordinate of the preferred artery lane or using the y-axis coordinateof the immediately preceding location and the x-axis coordinate of thepreferred artery lane; and selecting, using the processing unit of theserver, the artery entrance location as the candidate location.
 12. Thecomputer-implemented method of claim 11, further comprising:calculating, using the processing unit of the server, a straight-linesegment from the immediately preceding location to the artery entrancelocation prior to selecting the artery entrance location as thecandidate location; determining, using the processing unit of theserver, a laterally displaced location when the straight-line segmentintersects any of the polygonal obstructions, wherein the laterallydisplaced location is determined using a y-axis coordinate of theimmediately preceding location and an x-axis coordinate of the rawestimated location; and selecting, using the processing unit of theserver, the laterally displaced location as the candidate location. 13.The computer-implemented method of claim 9, further comprising:comparing, using the processing unit of the server, the raw estimatedlocation of the device in the coordinate plane with coordinatesrepresenting borders of the polygonal obstructions prior to calculatingthe straight-line path; determining, using the processing unit of theserver, the raw estimated location is within the borders of one of thepolygonal obstructions; adjusting, using the processing unit of theserver, at least one coordinate of the raw estimated location to placethe raw estimated location outside of the borders of the polygonalobstruction.
 14. The computer-implemented method of claim 9, furthercomprising: setting, using the processing unit of the server, asaturated location as the new location of the device when thehypothetical velocity calculated using the elapsed time and the distanceseparating the immediately preceding location and the weighted-averagelocation is greater than the saturation velocity, wherein the saturatedlocation is generated using the saturation velocity, and wherein thesaturated location is closer in distance to the immediately precedinglocation than the weighted-average location.
 15. A non-transitorycomputer-readable medium comprising instructions stored thereon, thatwhen executed by a processing unit, perform the steps of: receiving asignal strength profile, wherein the signal strength profile includes atleast one of signal strengths of wireless signal transceivers receivedat a device in the indoor environment and signal strengths of a devicereceived at wireless signal transceivers in the indoor environment andwherein the indoor environment contains one or more polygonalobstructions; determining a raw estimated location of the device in acoordinate plane representing the indoor environment by using aK-nearest neighbor (KNN) algorithm to compare the signal strengthprofile with reference profiles stored in a database; calculating astraight-line path in the coordinate plane from an immediately precedinglocation of the device to the raw estimated location; selecting the rawestimated location as a candidate location when the straight-line pathconnects the immediately preceding location and the raw estimatedlocation without intersecting any of the polygonal obstructions in thecoordinate plane; generating an interlinking point using an x-axiscoordinate of the immediately preceding location and a y-axis coordinateof the raw estimated location or the y-axis coordinate of theimmediately preceding location and the x-axis coordinate of the rawestimated location; calculating a first linear segment connecting theimmediately preceding location and the interlinking point and a secondlinear segment connecting the raw estimated location and theinterlinking point; selecting the interlinking point as the candidatelocation when: a first linear segment connects the immediately precedinglocation and the interlinking point without intersecting any of thepolygonal obstructions, and a second linear segment connects the rawestimated location and the interlinking point without intersecting anyof the polygonal obstructions; calculating a weighted-average locationusing the immediately preceding location and the candidate location; andstoring the weighted-average location as a new location of the device inthe indoor environment when a hypothetical velocity calculated using anelapsed time and a distance separating the immediately precedinglocation and the weighted-average location is less than or equal to asaturation velocity.
 16. (canceled)
 17. The non-transitorycomputer-readable medium of claim 15, further comprising instructionsstored thereon, that when executed by a processing unit, perform thesteps of: determining a first polyline path from the immediatelypreceding location to the raw estimated location, wherein a portion ofthe first polyline path traverses a first artery lane in the indoorenvironment; determining a second polyline path from the immediatelypreceding location to the raw estimated location, wherein a portion ofthe second polyline path traverses a second artery lane in the indoorenvironment; and selecting the first artery lane as a preferred arterylane when the first polyline path is shorter than the second polylinepath; selecting the second artery lane as the preferred artery lane whenthe second polyline path is shorter than the first polyline path;generating an artery entrance location using an x-axis coordinate of theimmediately preceding location and a y-axis coordinate of the preferredartery lane or using the y-axis coordinate of the immediately precedinglocation and the x-axis coordinate of the preferred artery lane; andselecting the artery entrance location as the candidate location. 18.The non-transitory computer-readable medium of claim 17, furthercomprising instructions stored thereon, that when executed by aprocessing unit, perform the steps of: calculating, using the processingunit of the server, a straight-line segment from the immediatelypreceding location to the artery entrance location prior to selectingthe artery entrance location as the candidate location; determining,using the processing unit of the server, a laterally displaced locationwhen the straight-line segment intersects any of the polygonalobstructions, wherein the laterally displaced location is determinedusing a y-axis coordinate of the immediately preceding location and anx-axis coordinate of the raw estimated location; and selecting, usingthe processing unit of the server, the laterally displaced location asthe candidate location.
 19. The non-transitory computer-readable mediumof claim 15, further comprising instructions stored thereon, that whenexecuted by a processing unit, perform the steps of: comparing the rawestimated location of the device in the coordinate plane withcoordinates representing borders of the polygonal obstructions prior tocalculating the straight-line path; determining the raw estimatedlocation is within the borders of one of the polygonal obstructions;adjusting at least one coordinate of the raw estimated location to placethe raw estimated location outside of the borders of the polygonalobstruction.
 20. The non-transitory computer-readable medium of claim15, further comprising instructions stored thereon, that when executedby a processing unit, perform the steps of: setting a saturated locationas the new location of the device when the hypothetical velocitycalculated using the elapsed time and the distance separating theimmediately preceding location and the weighted-average location isgreater than the saturation velocity, wherein the saturated location isgenerated using the saturation velocity, and wherein the saturatedlocation is closer in distance to the immediately preceding locationthan the weighted-average location.
 21. The system of claim 1, whereinselecting the raw estimated location as a candidate location when thestraight-line path connects the immediately preceding location and theraw estimated location without intersecting any of the polygonalobstructions in the coordinate plane comprises: accessing coordinatesrepresenting the polygonal obstructions; determining a set ofintersection points between the straight-line path and the coordinates;and responsive to the determined set being a null set, selecting the rawestimated location as the candidate location.
 22. Thecomputer-implemented method of claim 9, wherein selecting the rawestimated location as a candidate location when the straight-line pathconnects the immediately preceding location and the raw estimatedlocation without intersecting any of the polygonal obstructions in thecoordinate plane comprises: accessing coordinates representing thepolygonal obstructions; determining a set of intersection points betweenthe straight-line path and the coordinates; and responsive to thedetermined set being a null set, selecting the raw estimated location asthe candidate location.
 23. The non-transitory computer-readable mediumof claim 15, wherein selecting the raw estimated location as a candidatelocation when the straight-line path connects the immediately precedinglocation and the raw estimated location without intersecting any of thepolygonal obstructions in the coordinate plane comprises: accessingcoordinates representing the polygonal obstructions; determining a setof intersection points between the straight-line path and thecoordinates; and responsive to the determined set being a null set,selecting the raw estimated location as the candidate location.